home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / mcu / float09.arc / MVABSNEG.SA < prev    next >
Text File  |  1987-03-04  |  7KB  |  290 lines

  1.  NAM MOVE
  2.  TTL FMOVE FUNCTION
  3. *
  4. * LINKING LOADER DEFINITIONS
  5. *
  6.   XDEF    FMOVE,MOVUN,FABS,FNEG
  7. *
  8.   XREF    CLRES,FPMOVE,CLTBL,CHKUNF,CHKOVF,ADBIAS,SUBIAS
  9.   XREF    UNFLNT,OVFLNT,CKINVD,ROUND,IOPSUB,ISDNRM,RTAR2
  10. *
  11. * REVISION HISTORY:
  12. *   DATE    PROGRAMMER     REASON
  13. * 30.MAY.80    G. STEVENS     ORIGINAL
  14. * 07.JUL.80    G. STEVENS     FIX MOVE FCN.
  15. * 07.AUG.80    G. STEVENS     FIX NEG FCN( MAKE IT REALLY NEG)
  16. * 08.AUG.80    G. STEVENS     FIX CONTROL FLOW IN MOVUN
  17. * 11.AUG.80    G. STEVENS     SET UP RPREC IN FMOVE
  18. * 13.AUG.80    G. STEVENS     REMOVE SET RPREC IN MOVE
  19. * 14.AUG.80    G. STEVENS     UNMOVE HANDLES DENORMALIZED PROPERLY
  20. * 14.AUG.80    G. STEVENS     REMOVE ANY SIZE CHECKS IN FMOVE
  21. * 18.AUG.80    G. STEVENS     ABS & NEG INVOKE RTAR2 SOLVING UNFL PROBB.B
  22. *
  23.  PAGE
  24. *
  25. * LOCAL EQUATE
  26. *
  27. DSTSIZ EQU  BIT0+BIT1+BIT2
  28. *
  29. *
  30. * HERE IS THE TWO ROUTINE THAT MAKE UP THE MOVE
  31. * MOVE FUNCTION. PROCEDURE A HANDLES MOVES WHEN
  32. * THE OPERANDS ARE BOTH NORMALIZED. PROCEDURE B
  33. * HANDLES THE CASE WHERE THE OPERANDS ARE UNORMALIZED
  34. *
  35. ******************************************************************
  36. *
  37. * PROCEDURE  B:
  38. *
  39. * PROCEDURE  UNMOVE
  40. *
  41. *     UNMOVE CONVERTS AN UNNORMALIZED FLOATING OPERAND
  42. * ON THE STACK FRAME FROM ONE PRECISION TO ANOTHER. THE
  43. * PRECISIONS OF THE SOURCE AND DESTINATION ARE CONTAINED
  44. * IN THE TPARAM LOCATION ON THE STACK FRAME.
  45. *
  46. *  ON ENTRY:
  47. *    ARG2 CONTAINS THE INPUT ARGUMENT
  48. *
  49. *  ON EXIT:
  50. *    RESULT CONTAINS THE CONVERTED VALUE
  51. *    U - UNCHANGED
  52. *    D,X,Y,CC - DESTROYED
  53. *
  54. MOVUN EQU  *
  55. *
  56. * COMPARE SIZE OF SOURCE AND SIZE OF DESTINATION
  57. *
  58.  LDB  TPARAM+1,U          SIZE WORD
  59.  LDA  #16
  60.  MUL
  61.  LDB  TPARAM+1,U
  62.  ANDB  #07              DESTINATION SIZE IN B
  63. *
  64. * IF THE MOVE IS SINGLE TO DOUBLE THEN SIGNAL INVALID
  65. * OPERATION IOP = 15.
  66. *
  67.    IF  D,EQ,#(SIN/2*256+DBL/2)
  68.       IOP  15
  69. *
  70. *
  71. * ELSE IF THE MOVE IS FROM EXTENDED TO SINGLE OR DOUBLE
  72. * ANS THE ARGUMENT IS NOT DENORMALIZED THEN SIGNAL INVALID
  73. * OPERATION IOP = 16.
  74. *
  75.   ELSE
  76.     IF    A,GE,#(EXT/2)         SOURCE = SINGLE
  77.       IF  B,LT,#(EXT/2)      DESTINATION = DOUBLE
  78.     LEAX  ARG2,U
  79.     LSLA             DOUBLE SOURCE INDEX
  80.     LBSR  ISDNRM         CHECK FOR DENORMALIZED
  81.     IFCC  NE         NOT DENORMALIZED
  82.       IOP  16
  83. *
  84.       BRA  RET         RETURN
  85. *
  86.     ENDIF
  87.       ENDIF
  88.     ENDIF
  89. *
  90. *
  91. * ELSE IF NONE OF THE ABOVE INVOKE THE REGULAR MOVE
  92. * PROCEDURE.
  93. *
  94.     BSR  FMOVE
  95. *
  96.   ENDIF
  97. *
  98. RET  EQU  *
  99. *
  100.   RTS                 RETURN
  101. *
  102.  PAGE
  103. *
  104. * PROCEDURE A: OPERANDS NORMALIZED
  105. *
  106. * PROCEDURE AFMOVE
  107. *
  108. *      AFMOVE VONVERTS NORMALIZED FLOATING OPERANDS
  109. * ON THE STACK FRAME FROM ONE PRECISION TO ANOTHER
  110. * THE PRECISIONS OF THE SOURCE AND DESTINATION ARE
  111. * CONTAINED IN THE TPARAM+1 LOCATION ON THE STACK
  112. * FRAME. IF THE PRECISION OF THE SOURCE AND DESTINATION
  113. * ARE THE SAME THEN NO STACK FRAME IS BUILT SINCE NO REAL
  114. * CONVERSION IS NECESSARY.
  115. *
  116. * ON ENTRY:
  117. *      ARG2 CONTAINS THE INPUT ARGUMENT
  118. *      U - CONTAINS THE POINTER TO THE STACK FRAME
  119. *
  120. * ON EXIT:
  121. *      RESULT CONTAINS THE CONVERTED VALUE
  122. *      U - UNCHANGED
  123. *      A,B,X,Y,CC - DESTROYED
  124. *
  125. FMOVE EQU  *
  126. *
  127. *
  128. * MOVE INPUT ARGUMENT( ARG2 ) TO THE STACK FRAME RESULT
  129. *
  130.  LEAX  ARG2,U                INPUT ARGUMENT
  131.  LEAY  RESULT,U             DESTINATION
  132.  LBSR  FPMOVE
  133. *
  134. * IF THE DESTINATION IS SHORTER THAN THE SOURCE THEN
  135. * ROUNDING AND OVERFLOW/UNDERFLOW CHECKS MUST BE PERFORMED
  136. *
  137.  LDA  TPARAM+1,U            SIZE BYTE
  138.  ANDA  #DSTSIZ                DESTINATION SIZE
  139. *
  140. * OR BYTES BEYOND THE PRECISION OF DEST. INTO THE STICKY
  141. * BYTE
  142. *
  143.    LEAY  CLTBL,PCR
  144.    LDB    A,Y                 POSITON OF G- BYTE
  145.    INCB                  BUMP POINTER PAST G-BYTE
  146.    CLRA
  147.    WHILE  B,LT,(#ARGSIZ-1)
  148.      ORA  B,X                 OR THE BYTES
  149.      INCB
  150. *
  151.    ENDWH
  152.    STA    STIKY,U              SET UP STIKY
  153. *
  154.    LBSR  CHKUNF             CHECK FOR UNDERFLOW
  155. *
  156. * IF UNDERFLOW = TRUE AND THE TRAP IS ENABLED THEN DELIVER
  157. * THE RESULT IN INTERNAL FORMAT ROUNDED TO THE PRECISON
  158. * OF THE DESTINTION TO THE TRAP HANDLER.
  159. *
  160.    IFCC  EQ                 UNDERFLOW = TRUE
  161.      LDX  PFPCB,U             POINTER TO FPCB
  162.      LDA  ENB,X              ENABLE BYTE
  163.      ANDA  #ENBUNF             UNDERFLOW TRAP ENABLE
  164.      IFCC  NE                 TRAP ENABLED
  165.        LEAX  RESULT,U
  166.        LBSR  ADBIAS             WRAP AROUND EXPONENT
  167.        LBSR  ROUND             ROUND RESULT
  168. *
  169. * ELSE IF UNDERFLOW = TRUE BUT TRAP IS DISABLED THEN
  170. * UNDERFLOW_NO_TRAP.
  171. *
  172.      ELSE                 TRAP DISABLED
  173.        LBSR  UNFLNT
  174. *
  175.      ENDIF
  176. *
  177. * ELSE IF UNDERFLOW /=    TRUE THEN JUST ROUND RESULT
  178. * TO THE PRECISION OF THE DESTINATION
  179. *
  180.    ELSE                   UNDERFLOW /= TRUE
  181.      LEAX  RESULT,U
  182.      LBSR  ROUND              ROUND RESULT
  183. *
  184.    ENDIF                  UNDERFLOW = TRUE
  185. *
  186. * POST ROUND CHECKS
  187. *
  188.    LBSR  CKINVD               CHECK FOR INVALID OPERATION
  189. *
  190.    LBSR  CHKOVF
  191. *
  192. * IF OVERFLOW = TRUE AND TRAP IS ENABLED THEN DELIVER THE
  193. * RESULT IN INTERNAL FORMAT ROUNDED TO THE PRECISION OF
  194. * THE DESTINATION.
  195. *
  196.    IFCC  EQ                   OVERFLOW = TRUE
  197.      LDX  PFPCB,U               POINTER TO FPCB
  198.      LDA  ENB,X                ENABLE BYTE
  199.      ANDA  #ENBOVF               OVERFLOW TRAP ENABLE
  200.      IFCC  NE                   TRAP ENABLED
  201.        LBSR  SUBIAS
  202. *
  203. * ELSE IF OVERFLOW = TRUE BUT TRAP IS DISABLED THEN
  204. * INVOKE OVERFLOW_NO_TRAP.
  205. *
  206.      ELSE                   TRAP DISABLED
  207.        LBSR  OVFLNT
  208. *
  209.      ENDIF                TRAP ENABLED
  210. *
  211.    ENDIF                OVERFLOW = TRUE
  212. *
  213. * ELSE IF THE DESTINATION IS LARGER THEN THE SOURCE THEN
  214. * THE MOVE IS EXACT.
  215. *
  216. *
  217. *
  218.  RTS                     RETURN
  219. *
  220. *
  221. *
  222. *****************************************************************
  223. *
  224. *   ABSOLUTE VALUE AND NEGATE FUNCTIONS
  225. *
  226. ******************************************************************
  227. *
  228. * PROCEDURE  FABS
  229. *
  230. *      FABS RETURNS AS ITS RESULT THE ABSOLUTE VALUE
  231. * OF THE FLOATING PT. VALUE IN ARG2 ON THE STACK FRAME.
  232. *
  233. * ON ENTRY: ARG2 CONTAINS INPUT ARGUMENT
  234. *        U - POINTER TO THE STACK FRAME
  235. *
  236. * ON EXIT: RESULT CONTAINS THE ABSOLUTE VALUE OF THE INPUT
  237. *       U - UNCHANGED
  238. *       X,Y,D,CC - DESTROYED
  239. *
  240. * OPERATION:
  241. *      THE INPUT IS COPIED TO THE RESULT AND THE SIGN OF THE
  242. * RESULT IS SET TO $00 OR PLUS.
  243. *
  244. *
  245. FABS  EQU  *
  246. *
  247.   LBSR    RTAR2              MOVE ARG2 TO THE RESULT
  248. *
  249. * MAKE SIGN POSITIVE
  250. *
  251.   CLR  SIGNR,U
  252. *
  253.   RTS                  RETURN
  254. *
  255. *
  256. *****************************************************************
  257. *
  258. *
  259. * PROCEDURE  FNEG
  260. *
  261. *      FNEG RETURNS AS ITS RESULT THE NEGATIVE
  262. * OF THE FLOATING PT. VALUE IN ARG2 ON THE STACK FRAME.
  263. *
  264. * ON ENTRY: ARG2 CONTAINS INPUT ARGUMENT
  265. *        U - POINTER TO THE STACK FRAME
  266. *
  267. * ON EXIT: RESULT CONTAINS THE ABSOLUTE VALUE OF THE INPUT
  268. *       U - UNCHANGED
  269. *       X,Y,D,CC - DESTROYED
  270. *
  271. * OPERATION:
  272. *      THE INPUT IS COPIED TO THE RESULT AND THE SIGN OF THE
  273. * RESULT IS COMPLEMENTED.
  274. *
  275. *
  276. FNEG  EQU  *
  277. *
  278.   LBSR    RTAR2              RETURN ARG2 IN THE RESULT
  279. *
  280. * COMPLEMENT THE SIGN
  281. *
  282.   LDA  SIGNR,U
  283.   EORA    #$80
  284.   STA  SIGNR,U
  285. *
  286.   RTS                  RETURN
  287. *
  288. *
  289.  PAGE
  290.